package 面试经典150题.链表;

import common.ListNode;

public class T61旋转链表 {
    public ListNode rotateRight(ListNode head, int k) {
        //判断head是不是空节点
        if (head == null || k == 0) {
            return head;
        }
        ListNode p = head;
        //让tail节点指向链表的尾节点
        ListNode tail = null;
        int len = 0;
        //统计链表长度
        while (p != null) {
            tail=p;
            len++;
            p=p.next;
        }
        k = k % len;
        p=head;
        //找到第len-k个节点
        for(int i=0;i<len-k-1;i++){
            p=p.next;
        }
        //进行变换的逻辑操作
        //1.让尾节点指向头节点
        tail.next=head;
        //2.head节点指向p的下一个节点
        head=p.next;
        //3.p.next只想空
        p.next=null;
        //返回头结点
        return head;

    }
/*  优质解析
    作者：林小鹿
    链接：https://leetcode.cn/problems/rotate-list/solutions/1008999/xuan-zhuan-lian-biao-tu-jie-lian-biao-zu-ku33/
    来源：力扣（LeetCode）
    著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。*/
}
